
Datos
Objetivos
Metodología
- Importación de datos
- Depuración, estructuración e integración de datos
2.1 Selección de variables de interés.
2.2 Unificación de mayúsuculas a minúsculas.
2.3 Unificación de niveles de factores (variables categóricas).
2.4 Eliminación de símbolos en variables numéricas.
2.5 Coerción de variables.
2.6 Edición de nombres de variables (no se tienen en cuenta tildes por viabilidad de análisis).
2.7 Filtrado de datos atípicos (errados) para variables químicas y físicas de suelo. Este filtro se aplicó basado en literatura y percentiles.
- Información general
- Análisis descriptivo
- Análisis exploratorio
- Machine Learning
- Referencias
Resultados
1. Lectura de datos

datos2 <- datos1 %>%
select(crto = Corregimiento,
vereda = Vereda.Sector,
area_ha = Area..Has.,
altitud = Altura.M.S.N.M.,
temperatura = T...C.,
pluvi = Pp..Mm.Año.,
suelo = Tipo.Suelo,
pendiente = Pendiente,
niv_tecno = Nivel.Tecnlogico,
predio = Tenencia.del.predio,
agua_propia = Agua.Propia,
acueducto = Acueducto,
electri = Energ.Electrica,
gas_natural = Gas.Natural,
internet = E.Internet,
analysis_suelo = Analisis.De.Suelos,
cultivo = Cultivo,
variedad = Variedad,
area_cultivada = Area.Cultivada..Has.,
prodn_kg = Produccion..Kg.,
p_mercado = X..Al.Mercado,
venta = Forma.Venta,
pago = Forma.Pago,
especie = Especie,
raza = Raza,
animales = Numero,
prodn_animal = Produccion,
longitud = Longitud..W.,
latitud = Latitud..N.) %>%
mutate(area_ha = as.numeric(as.character(gsub(",", ".", area_ha))),
altitud = as.numeric(as.character(gsub(",", ".", altitud))),
temperatura = as.numeric(as.character(gsub(",", ".", temperatura))),
pluvi = as.numeric(as.character(gsub(",", ".", plavi))),
area_cultivada = as.numeric(as.character(gsub(",", ".", area_cultivada))),
prodn_kg = as.numeric(as.character(gsub(",", ".", prodn_kg))),
p_mercado = as.numeric(as.character(gsub(",", ".", p_mercado))))
Error in gsub(",", ".", plavi) : objeto 'plavi' no encontrado














LS0tDQp0aXRsZTogIkFzaXN0ZW5jaWEgVMOpY25pY2EgZW4gUGFsbWlyYSBWYWxsZSBkZWwgQ2F1Y2EgLSAyMDE3Ig0Kc3VidGl0bGU6ICJVc29zIGRlbCBNYWNoaW5lIExlYXJuaW5nIGVuIEFncmljdWx0dXJhIg0KYXV0aG9yOiAiRWRpbWVyIERhdmlkIEphcmFtaWxsbyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICBjc3M6IGNzcy9lc3RpbG8uY3NzDQogICAgdGhlbWU6IGNvc21vDQogICAgaGlnaGxpZ2h0OiB6ZW5idXJuDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5hbGlnbiA9ICJjZW50ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy53aWR0aCA9IDguNSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gNSwNCiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSA9IFRSVUUpDQpgYGANCg0KPGltZyBzcmM9ImltZy9zY2llbmNlLnBuZyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7cmlnaHQ6MzBweDsgd2lkdGg6MTUwcHgiIC8+DQoNCjxjZW50ZXI+PGltZyBzcmM9ImltZy9hZ3JvX2RhdG9zLmpwZyIvPjwvY2VudGVyPg0KDQojIERhdG9zDQoNCi0gW0Z1ZW50ZSBkZSBkYXRvczogKmRhdG9zLmdvdi5jbypdKGh0dHBzOi8vd3d3LmRhdG9zLmdvdi5jby9BZ3JpY3VsdHVyYS15LURlc2Fycm9sbG8tUnVyYWwvUmVnaXN0cm8tbmljby1kZS1Vc3Vhcmlvcy1kZS1Bc2lzdGVuY2lhLVQtY25pY2EtUlUvZTV1cy1yc3dtKQ0KLSA8dHJlZD7Dmmx0aW1hIGNvbXBpbGFjacOzbiBkZSBlc3RlIGRvY3VtZW50bzogYHIgU3lzLkRhdGUoKWAuPC90cmVkPg0KDQo8Y2VudGVyPg0KPGltZyBzcmM9ImltZy9kYXRvc19wYWxtaXJhLnBuZyIvPg0KPC9jZW50ZXI+DQoNCiMgT2JqZXRpdm9zDQoNCiMgTWV0b2RvbG9nw61hDQoNCjEuIEltcG9ydGFjacOzbiBkZSBkYXRvcw0KMi4gRGVwdXJhY2nDs24sIGVzdHJ1Y3R1cmFjacOzbiBlIGludGVncmFjacOzbiBkZSBkYXRvcyAgDQogICAgMi4xIFNlbGVjY2nDs24gZGUgdmFyaWFibGVzIGRlIGludGVyw6lzLiAgICAgICANCiAgICAyLjIgVW5pZmljYWNpw7NuIGRlIG1hecO6c3VjdWxhcyBhIG1pbsO6c2N1bGFzLiAgIA0KICAgIDIuMyBVbmlmaWNhY2nDs24gZGUgbml2ZWxlcyBkZSBmYWN0b3JlcyAodmFyaWFibGVzIGNhdGVnw7NyaWNhcykuICAgICANCiAgICAyLjQgRWxpbWluYWNpw7NuIGRlIHPDrW1ib2xvcyBlbiB2YXJpYWJsZXMgbnVtw6lyaWNhcy4gICANCiAgICAyLjUgQ29lcmNpw7NuIGRlIHZhcmlhYmxlcy4gICAgDQogICAgMi42IEVkaWNpw7NuIGRlIG5vbWJyZXMgZGUgdmFyaWFibGVzIChubyBzZSB0aWVuZW4gZW4gY3VlbnRhIHRpbGRlcyBwb3IgdmlhYmlsaWRhZCBkZSBhbsOhbGlzaXMpLiAgICANCiAgICAyLjcgRmlsdHJhZG8gZGUgZGF0b3MgYXTDrXBpY29zIChlcnJhZG9zKSBwYXJhIHZhcmlhYmxlcyBxdcOtbWljYXMgeSBmw61zaWNhcyBkZSBzdWVsby4gRXN0ZSBmaWx0cm8gc2UgYXBsaWPDsyBiYXNhZG8gZW4gbGl0ZXJhdHVyYSB5IHBlcmNlbnRpbGVzLg0KMy4gSW5mb3JtYWNpw7NuIGdlbmVyYWwNCjQuIEFuw6FsaXNpcyBkZXNjcmlwdGl2byAgDQo1LiBBbsOhbGlzaXMgZXhwbG9yYXRvcmlvDQo2LiBNYWNoaW5lIExlYXJuaW5nDQo3LiBSZWZlcmVuY2lhcw0KDQojIFJlc3VsdGFkb3Mgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQoNCiMjIDEuIExlY3R1cmEgZGUgZGF0b3MNCg0KYGBge3J9DQp1cmwgPC0gImh0dHBzOi8vd3d3LmRhdG9zLmdvdi5jby9hcGkvdmlld3MvZTV1cy1yc3dtL3Jvd3MuY3N2P2FjY2Vzc1R5cGU9RE9XTkxPQUQiDQpkYXRvczEgPC0gcmVhZC5jc3YoZmlsZSA9IHVybCwgZW5jb2RpbmcgPSAiVVRGLTgiLCBkZWMgPSAiLCIsDQogICAgICAgICAgICAgICAgICAgbmEuc3RyaW5ncyA9IGMoIj8iLCAiwr8iKSkNCmRhdG9zMQ0KYGBgDQoNCg0KYGBge3J9DQpkYXRvczEgJT4lIA0KICBncm91cF9ieShDb3JyZWdpbWllbnRvKSAlPiUNCiAgY291bnQoKSAlPiUgZ2dwbG90KGRhdGEgPSAuLCBhZXMoeCA9IHJlb3JkZXIoQ29ycmVnaW1pZW50bywgbiksIHkgPSBuKSkgKw0KICBnZW9tX2NvbCgpICsgDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KDQpgYGB7cn0NCmRhdG9zMiA8LSBkYXRvczEgJT4lIA0KICBzZWxlY3QoY3J0byA9IENvcnJlZ2ltaWVudG8sDQogICAgICAgICB2ZXJlZGEgPSBWZXJlZGEuU2VjdG9yLA0KICAgICAgICAgYXJlYV9oYSA9IEFyZWEuLkhhcy4sDQogICAgICAgICBhbHRpdHVkID0gQWx0dXJhLk0uUy5OLk0uLA0KICAgICAgICAgdGVtcGVyYXR1cmEgPSBULi4uQy4sDQogICAgICAgICBwbHV2aSA9IFBwLi5NbS5Bw7FvLiwNCiAgICAgICAgIHN1ZWxvID0gVGlwby5TdWVsbywNCiAgICAgICAgIHBlbmRpZW50ZSA9IFBlbmRpZW50ZSwNCiAgICAgICAgIG5pdl90ZWNubyA9IE5pdmVsLlRlY25sb2dpY28sDQogICAgICAgICBwcmVkaW8gPSBUZW5lbmNpYS5kZWwucHJlZGlvLA0KICAgICAgICAgYWd1YV9wcm9waWEgPSBBZ3VhLlByb3BpYSwNCiAgICAgICAgIGFjdWVkdWN0byA9IEFjdWVkdWN0bywNCiAgICAgICAgIGVsZWN0cmkgPSBFbmVyZy5FbGVjdHJpY2EsDQogICAgICAgICBnYXNfbmF0dXJhbCA9IEdhcy5OYXR1cmFsLA0KICAgICAgICAgaW50ZXJuZXQgPSBFLkludGVybmV0LA0KICAgICAgICAgYW5hbHlzaXNfc3VlbG8gPSBBbmFsaXNpcy5EZS5TdWVsb3MsDQogICAgICAgICBjdWx0aXZvID0gQ3VsdGl2bywNCiAgICAgICAgIHZhcmllZGFkID0gVmFyaWVkYWQsDQogICAgICAgICBhcmVhX2N1bHRpdmFkYSA9IEFyZWEuQ3VsdGl2YWRhLi5IYXMuLA0KICAgICAgICAgcHJvZG5fa2cgPSBQcm9kdWNjaW9uLi5LZy4sDQogICAgICAgICBwX21lcmNhZG8gPSBYLi5BbC5NZXJjYWRvLA0KICAgICAgICAgdmVudGEgPSBGb3JtYS5WZW50YSwNCiAgICAgICAgIHBhZ28gPSBGb3JtYS5QYWdvLA0KICAgICAgICAgZXNwZWNpZSA9IEVzcGVjaWUsDQogICAgICAgICByYXphID0gUmF6YSwNCiAgICAgICAgIGFuaW1hbGVzID0gTnVtZXJvLA0KICAgICAgICAgcHJvZG5fYW5pbWFsID0gUHJvZHVjY2lvbiwNCiAgICAgICAgIGxvbmdpdHVkID0gTG9uZ2l0dWQuLlcuLA0KICAgICAgICAgbGF0aXR1ZCA9IExhdGl0dWQuLk4uKSAlPiUgDQogIG11dGF0ZShhcmVhX2hhID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZ3N1YigiLCIsICIuIiwgYXJlYV9oYSkpKSwNCiAgICAgICAgIGFsdGl0dWQgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihnc3ViKCIsIiwgIi4iLCBhbHRpdHVkKSkpLA0KICAgICAgICAgdGVtcGVyYXR1cmEgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihnc3ViKCIsIiwgIi4iLCB0ZW1wZXJhdHVyYSkpKSwNCiAgICAgICAgIHBsdXZpID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZ3N1YigiLCIsICIuIiwgcGx1dmkpKSksDQogICAgICAgICBhcmVhX2N1bHRpdmFkYSA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGdzdWIoIiwiLCAiLiIsIGFyZWFfY3VsdGl2YWRhKSkpLA0KICAgICAgICAgcHJvZG5fa2cgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihnc3ViKCIsIiwgIi4iLCBwcm9kbl9rZykpKSwNCiAgICAgICAgIHBfbWVyY2FkbyA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGdzdWIoIiwiLCAiLiIsIHBfbWVyY2FkbykpKSkNCmBgYA0KDQoNCmBgYHtyfQ0KZGF0b3MyIA0KYGBgDQoNCg0KYGBge3J9DQpkYXRvczIgJT4lIA0KICBzZWxlY3RfaWYoaXMubnVtZXJpYykgJT4lIA0KICBzZWxlY3QoLWMobG9uZ2l0dWQsIGxhdGl0dWQpKSAlPiUgDQogIGdhdGhlcihrZXkgPSAidmFyaWFibGUiLCB2YWx1ZSA9ICJ2YWxvciIpICU+JSANCiAgZ2dwbG90KGRhdGEgPSAuLCBhZXMoeCA9IHZhbG9yKSkgKw0KICBmYWNldF93cmFwKH52YXJpYWJsZSwgc2NhbGVzID0gImZyZWUiKSArDQogIGdlb21fZGVuc2l0eSgpDQpgYGANCg0KYGBge3J9DQpkYXRvczIgJT4lIA0KICBzZWxlY3RfaWYoaXMubnVtZXJpYykgJT4lIA0KICBzZWxlY3QoLWMobG9uZ2l0dWQsIGxhdGl0dWQpKSAlPiUgDQogIGdhdGhlcihrZXkgPSAidmFyaWFibGUiLCB2YWx1ZSA9ICJ2YWxvciIpICU+JSANCiAgZ2dwbG90KGRhdGEgPSAuLCBhZXMoeCA9IGxvZyh2YWxvcikpKSArDQogIGZhY2V0X3dyYXAofnZhcmlhYmxlLCBzY2FsZXMgPSAiZnJlZSIpICsNCiAgZ2VvbV9kZW5zaXR5KCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGF0b3MyICU+JSANCiAgZ2dwbG90KGRhdGEgPSAuLCBhZXMobG9nKGFyZWFfaGEpLCBsb2coYXJlYV9jdWx0aXZhZGEpKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAicmVkIikNCmBgYA0KDQoNCmBgYHtyfQ0KZGF0b3MyICU+JSANCiAgZ3JvdXBfYnkoY3VsdGl2bykgJT4lDQogIGNvdW50KCkgJT4lIA0KICBmaWx0ZXIobiA+PSAzKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSByZW9yZGVyKGN1bHRpdm8sIG4pLCB5ID0gbikpICsNCiAgZ2VvbV9jb2woKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0b3MyICU+JSANCiAgZmlsdGVyKGN1bHRpdm8gPT0gIlBsw6F0YW5vIikgJT4lIA0KICBmaWx0ZXIocHJvZG5fa2cgPD0gMjAwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBhbHRpdHVkLCB5ID0gbG9nKHByb2RuX2tnKSkpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkNCmBgYA0KDQpgYGB7cn0NCmRhdG9zMiAlPiUgDQogIGZpbHRlcihjdWx0aXZvID09ICJQbMOhdGFubyIpICU+JSANCiAgZmlsdGVyKHByb2RuX2tnIDw9IDMwMCkgJT4lIA0KICBnZ3Bsb3QoZGF0YSA9IC4sIGFlcyh4ID0gYWx0aXR1ZCwgeSA9IGxvZyhwcm9kbl9rZykpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpDQpgYGANCg0KYGBge3J9DQpkYXRvczIgJT4lIA0KICBmaWx0ZXIoY3VsdGl2byA9PSAiUGzDoXRhbm8iKSAlPiUgDQogIGZpbHRlcihwcm9kbl9rZyA8PSAzMDApICU+JSANCiAgZmlsdGVyKGxvbmdpdHVkIDw9IDUwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBsb25naXR1ZCwgeSA9IGxvZyhwcm9kbl9rZykpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpDQpgYGANCg0KYGBge3J9DQpkYXRvczIgJT4lIA0KICBtdXRhdGUoYXJlYV91c2FkYSA9IChhcmVhX2N1bHRpdmFkYS9hcmVhX2hhKSoxMDApICU+JSANCiAgZmlsdGVyKGFyZWFfdXNhZGEgPD0gMjAwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBhcmVhX3VzYWRhKSkgKw0KICBnZW9tX2RlbnNpdHkoKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0b3MyICU+JSANCiAgZmlsdGVyKGN1bHRpdm8gPT0gIlBsw6F0YW5vIikgJT4lIA0KICBmaWx0ZXIocHJvZG5fa2cgPD0gMjAwKSAlPiUgDQogIG11dGF0ZShyZW5kaW1pZW50byA9IHByb2RuX2tnL2FyZWFfY3VsdGl2YWRhKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSByZW5kaW1pZW50bykpICsNCiAgZ2VvbV9kZW5zaXR5KCkNCmBgYA0KDQoNCmBgYHtyLCBmaWcud2lkdGg9OX0NCmxpYnJhcnkoZ2dwdWJyKQ0KZ2dhcnJhbmdlKA0KICANCiAgZGF0b3MyICU+JSANCiAgZmlsdGVyKGN1bHRpdm8gPT0gIlBsw6F0YW5vIikgJT4lIA0KICBmaWx0ZXIocHJvZG5fa2cgPD0gMjAwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBhbHRpdHVkLCB5ID0gbG9nKHByb2RuX2tnKSkpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkrDQogIGxhYnModGl0bGUgPSAiUHJvZHVjY2nDs24iKSwNCg0KICBkYXRvczIgJT4lIA0KICBmaWx0ZXIoY3VsdGl2byA9PSAiUGzDoXRhbm8iKSAlPiUgDQogIGZpbHRlcihwcm9kbl9rZyA8PSAyMDApICU+JSANCiAgbXV0YXRlKHJlbmRpbWllbnRvID0gcHJvZG5fa2cvYXJlYV9jdWx0aXZhZGEpICU+JSANCiAgZmlsdGVyKGFsdGl0dWQgPj0gOTQwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBhbHRpdHVkLCB5ID0gcmVuZGltaWVudG8pKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpICsNCiAgZ2VvbV9zbW9vdGgoc2UgPSBGQUxTRSwgY29sb3IgPSAicmVkIikgKw0KICBsYWJzKHRpdGxlID0gIlJlbmRpbWllbnRvIiksDQogIA0KICBuY29sID0gMg0KKSANCmBgYA0KDQpgYGB7ciwgZmlnLndpZHRoPTl9DQpkYXRvczIgJT4lIA0KICBmaWx0ZXIoY3VsdGl2byA9PSAiUGzDoXRhbm8iKSAlPiUgDQogIGZpbHRlcihwcm9kbl9rZyA8PSAyMDApICU+JSANCiAgbXV0YXRlKHJlbmRpbWllbnRvID0gcHJvZG5fa2cvYXJlYV9jdWx0aXZhZGEpICU+JSANCiAgZmlsdGVyKGxvbmdpdHVkIDw9IDUwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBsb25naXR1ZCwgeSA9IHJlbmRpbWllbnRvKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UsIGNvbG9yID0gInJlZCIpICsNCiAgbGFicyh0aXRsZSA9ICJSZW5kaW1pZW50byIpDQpgYGANCg0KDQpgYGB7ciwgZmlnLndpZHRoPTl9DQpkYXRvczIgJT4lIA0KICBmaWx0ZXIoY3VsdGl2byA9PSAiUGzDoXRhbm8iKSAlPiUgDQogIGZpbHRlcihwcm9kbl9rZyA8PSAyMDApICU+JSANCiAgbXV0YXRlKHJlbmRpbWllbnRvID0gcHJvZG5fa2cvYXJlYV9jdWx0aXZhZGEpICU+JSANCiAgZ2dwbG90KGRhdGEgPSAuLCBhZXMoeCA9IGFsdGl0dWQsIHkgPSByZW5kaW1pZW50bykpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkgKw0KICBnZW9tX3Ntb290aChzZSA9IEZBTFNFLCBjb2xvciA9ICJyZWQiKSArDQogIGxhYnModGl0bGUgPSAiUmVuZGltaWVudG8iKQ0KYGBgDQoNCmBgYHtyLCBmaWcud2lkdGg9OX0NCmRhdG9zMiAlPiUgDQogIGZpbHRlcihjdWx0aXZvID09ICJQbMOhdGFubyIpICU+JSANCiAgZmlsdGVyKHByb2RuX2tnIDw9IDIwMCkgJT4lIA0KICBtdXRhdGUocmVuZGltaWVudG8gPSBwcm9kbl9rZy9hcmVhX2N1bHRpdmFkYSkgJT4lDQogIGZpbHRlcihsb25naXR1ZCA8PSAwKSAlPiUgDQogIGdncGxvdChkYXRhID0gLiwgYWVzKHggPSBsb25naXR1ZCwgeSA9IGFsdGl0dWQpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGxhYnModGl0bGUgPSAiUmVuZGltaWVudG8iKSArDQogIGNvb3JkX2NhcnRlc2lhbigpDQpgYGANCg0KYGBge3J9DQpsaW1pdF9pbmZfbG9uZyA8LSBtaW4oZGF0b3MyJGxvbmdpdHVkKQ0KbGlicmFyeShHQURNVG9vbHMpDQpjb2wwIDwtIGdhZG1fc2ZfbG9hZENvdW50cmllcyhmaWxlTmFtZXMgPSBjKCJDT0wiKSwgbGV2ZWwgPSAyKQ0KZ2FkbV9wbG90KGNvbDApICsNCiAgeGxpbSgtNzYuNSwgLTc2KSArDQogIHlsaW0oMy4yLCAzLjgpICsNCiAgZ2VvbV9wb2ludChkYXRhID0gZGF0b3MyICU+JSBmaWx0ZXIobG9uZ2l0dWQgPCAwKSAlPiUNCiAgICAgICAgICAgICAgIGZpbHRlcihjdWx0aXZvID09ICJQbMOhdGFubyIpLA0KICAgICAgICAgICAgIGFlcyh4ID0gbG9uZ2l0dWQsIHkgPSBsYXRpdHVkLCBjb2xvciA9IHByb2RuX2tnKSkgKw0KICBsYWJzKHRpdGxlID0gIlByb2R1Y2Npw7NuIGVuIGtnIGRlIHBsw6F0YW5vIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJQYWxtaXJhLCBWYWxsZSBkZWwgQ2F1Y2EiKQ0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHBsb3RseSkNCmdncGxvdGx5KA0KICBnYWRtX3Bsb3QoY29sMCkgKw0KICB4bGltKC03Ni41LCAtNzYpICsNCiAgeWxpbSgzLjIsIDMuOCkgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBkYXRvczIgJT4lIGZpbHRlcihsb25naXR1ZCA8IDApICU+JQ0KICAgICAgICAgICAgICAgZmlsdGVyKGN1bHRpdm8gPT0gIlBsw6F0YW5vIiksDQogICAgICAgICAgICAgYWVzKHggPSBsb25naXR1ZCwgeSA9IGxhdGl0dWQsIGNvbG9yID0gcHJvZG5fa2cpKSArDQogIGxhYnModGl0bGUgPSAiUHJvZHVjY2nDs24gZW4ga2cgZGUgcGzDoXRhbm8iLA0KICAgICAgIHN1YnRpdGxlID0gIlBhbG1pcmEsIFZhbGxlIGRlbCBDYXVjYSIpDQopDQpgYGANCg0K